/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package interfacesGraficas.ModeloCombo;

import entidadesNegocio.TipoProducto;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;

/**
 *
 * @author eduardo
 */
public class ModeloComboBoxTipoProducto extends DefaultComboBoxModel {

    private List<TipoProducto> listaTipo;

    public ModeloComboBoxTipoProducto() {
        listaTipo = new ArrayList<TipoProducto>();
        addElement("Seleccione un Tipo de Producto");


    }

    public ModeloComboBoxTipoProducto(List<TipoProducto> nuevalista) {

        listaTipo = nuevalista;
        addElement("Seleccione Un Tipo de Producto");
        for (TipoProducto tipo : nuevalista) {
            addElement(tipo.getNombretipoproducto());

        }


    }

    public void setListaCombo(List<TipoProducto> nuevalista) {
        listaTipo = nuevalista;
        removeAllElements();
        addElement("Seleccione Un Tipo de Producto");
        for (TipoProducto tipo : nuevalista) {
            addElement(tipo.getNombretipoproducto());

        }

    }

    public ModeloComboBoxTipoProducto(ModeloComboBoxTipoProducto modelo) {
        addElement("Seleccione Un Tipo de Producto");
        listaTipo = modelo.getListaTipo();
        for (TipoProducto tipo : listaTipo) {
            addElement(tipo.getNombretipoproducto());

        }
    }

    public ModeloComboBoxTipoProducto(ComboBoxModel modelo) {
        addElement("Seleccione Un Tipo de Producto");
        listaTipo = ((ModeloComboBoxTipoProducto) modelo).getListaTipo();
        for (TipoProducto tipo : listaTipo) {
            addElement(tipo.getNombretipoproducto());

        }
    }

    public TipoProducto getTipoSeleccionado() {
        TipoProducto TipoEncontrado = null;
        for (TipoProducto tipo : listaTipo) {
            if (tipo.getNombretipoproducto().equals(super.getSelectedItem().toString())) {
                TipoEncontrado = tipo;
            }
        }

        return TipoEncontrado;

    }

    public void agergarTipo(TipoProducto nuevoTipo) {
        if (listaTipo == null) {
            listaTipo = new ArrayList<TipoProducto>();
            addElement("Seleccione Un Tipo de Producto");
        }
        for (TipoProducto tipoProducto : listaTipo) {
            if (tipoProducto.getCodigoTipoProducto().equals(nuevoTipo.getCodigoTipoProducto())) {
                return;
            }
        }
        listaTipo.add(nuevoTipo);
        super.addElement(nuevoTipo.getNombretipoproducto());
    }

    public List<TipoProducto> getListaTipo() {
        return listaTipo;
    }

    public void setTipoSeleccionado(TipoProducto tipoProducto) {
        if (listaTipo != null) {
            for (TipoProducto tipo : listaTipo) {
                if (tipo.getNombretipoproducto().equals(tipoProducto.getNombretipoproducto())) {
                    setSelectedItem(tipoProducto.getNombretipoproducto());
                }
            }
        }
    }

    public void ordenar() {
        Collections.sort(listaTipo, new OrdenarPorNombre());
        removeAllElements();
        addElement("Seleccione Un Tipo de Producto");
        
        for (TipoProducto tipoProducto : listaTipo) {
            addElement(tipoProducto.getNombretipoproducto());
        }
    }
    
    public void quitarTipo(TipoProducto tipo){
        for (int i=0; i<listaTipo.size(); i++) {
            if(listaTipo.get(i).getId()==tipo.getId()){
                listaTipo.remove(i);
                removeElement(tipo.getNombretipoproducto());
            }
        }
    }
}

class OrdenarPorNombre implements Comparator<TipoProducto> {

    public int compare(TipoProducto p1, TipoProducto p2) {
        return p1.getNombretipoproducto().compareToIgnoreCase(p2.getNombretipoproducto());
    }
}